Cores, Debugging, and Coverage
نویسندگان
چکیده
Debugging is difficult and costly, especially for production failures. To aid developers, we enhance core memory dumps produced by crashing applications with lightweight, tunable tracing. We propose two complementary forms of tracing, path traces and global coverage, and demonstrate that they can provide substantial postmortem analysis benefit at low cost. Recent work focuses on the interplay of these mechanisms, and comparison of various forms of coverage data. 1. Problem and Motivation Testing and debugging of software is difficult, expensive, and time-consuming. Debugging, testing, and verification can account for 50–75% of a software project’s cost [12, 15, 33]. Even with extensive in-house testing, however, postdeployment failures are inevitable in complex software. In this scenario, failure reports containing traces or failurefocused views of program state are very valuable. While comprehensive reports with complete traces of productionrun failures are ideal, this level of detail is impractical for complex programs. Even for simple code, full-tracing overhead may only be acceptable during in-house testing. A core memory dump is a useful and readily-available artifact from a program crash. Coupled with symbol information, a core dump reveals the program stack for each thread at the time of termination, global variables, and some portion of heap data. Importantly, a core dump provides the crashing location and the active call-site in every other stack frame, thus providing both a snapshot of crash state and a partial call history for the program. Horwitz et al. [17] show a substantial postmortem analysis benefit by taking advantage of this information. Nevertheless, our prior work [28] indicates that significant execution ambiguity remains after postmortem analysis utilizing a stack trace alone. The goal of this work is to enhance readily-available postdeployment failure information with lightweight, tunable instrumentation. Enhanced failure information could then be given to a developer for manual debugging, or could be used to perform automated postmortem analysis to provide a reduced view of the failure state for the developer (as in this ∗ This paper originally appeared as a grand finals submission to the ACM Student Research Competition in 2014. work). Building on the information already available in a core dump can yield inexpensive but valuable postmortem data. Our existing instrumentation and analysis framework [28] validates this using two customizable core-dump-enhancement mechanisms: path traces and call-site coverage. Recent work investigates the cost and benefit of these mechanisms independently [27], and considers other forms of lightweight core dump enhancement. This document focuses on work investigating the cost/benefit trade-offs of different forms of coverage. Necessary background material is discussed in section 2. Section 3 describes our approach to lightweight instrumentation and analysis of core dump data. Section 4 discusses previous evaluations and new data comparing different granularities of coverage data. Section 5 considers related work. Section 6 concludes and suggests future and ongoing work.
منابع مشابه
Debugging Design Errors by Using Unsatisfiable Cores
Due to the increasing complexity of today’s circuits a high degree of automation in the design process is mandatory. The detection of faults and design errors is supported quite well using simulation or formal verification. But locating the fault site is typically a time consuming manual task. Techniques to automate debugging and diagnosis have been proposed. Approaches based on Boolean Satisfi...
متن کاملEfficient Debugging of Multiple Design Errors
After functional verification detects a failure, design debugging aims to find all locations in the design that could be responsible for the observed error. The task of debugging becomes more difficult in modern designs because of the presence of multiple design errors. Multiple design errors exponentially increase the solution space of the debugging problem, leading to an intractable problem. ...
متن کاملMARKOVIAN SOFTWARE RELIABILITY MODEL FOR TWO TYPES OF FAILURES WITH IMPERFECT DEBUGGING RATE AND GENERATION OF ERRORS
N
متن کاملTowards a Notion of Unsatisfiable Cores for LTL
Unsatisfiable cores, i.e., parts of an unsatisfiable formula that are themselves unsatisfiable, have important uses in debugging specifications, speeding up search in model checking or SMT, and generating certificates of unsatisfiability. While unsatisfiable cores have been well investigated for Boolean SAT and constraint programming, the notion of unsatisfiable cores for temporal logics such a...
متن کاملTest-Signal Search for Mixed-Signal Cores in a System-on-Chip
The well-known approach towards testing mixed-signal cores is functional testing and basically measuring key parameters of the core. However, especially if performance requirements increase, and embedded cores are considered, functional testing becomes technically and economically less attractive. A more cost-effective approach could be accomplished by a combination of reduced functional tests ...
متن کامل